using E;
using ArmyAnt.Domain.Entity;
using Microsoft.EntityFrameworkCore;

namespace ArmyAnt.EntityFrameworkCore.Db
{
    public class ArmyAntDb : DbContext
    {
        public ArmyAntDb(DbContextOptions<ArmyAntDb> options) : base(options)
        {

        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            // 禁用 使用DbSet名称作为表名和视图名称,优先读Table标记,其次类名
            E.EntityFrameworkCoreTableViewExtensions.UseDbSetNameToTableName = false;

            // 设置小写
            E.EntityFrameworkCoreTableViewExtensions.SetCaseType(modelBuilder, ColumnNameCaseType.Lower);

            // 自定义要处理的字段类型,较多,此处不贴完整
            E.EntityFrameworkCoreTableViewExtensions.DbMapTypes.Add("System.String[]");
            E.EntityFrameworkCoreTableViewExtensions.DbMapTypes.Add("System.Boolean[]");
            E.EntityFrameworkCoreTableViewExtensions.DbMapTypes.Add("System.Int32[]");

            // 处理此数据库上下文类型中 DbSet
            // 参数为 true,则 自动跳过处理 DbContext 程序集中已实现的 IEntityTypeConfiguration 的 DbSet<Entity>
            modelBuilder.CaseAllDbSetNameAndColumnName<ArmyAntDb>(/* true */);


        }

        public DbSet<Users> Users { get; set; }
        public DbSet<Roles> Roles { get; set; }
    }
}